package com.whitedust.top100;

import java.util.Stack;

/**
 *
 * @author A
 * @since 2025/11/17 19:13
 */

public class Top94 {
    public int calculate(String s) {
        Stack<Integer> stack = new Stack<>();
        int num = 0;
        char op = '+';
        //因为只有正数且只有加减乘除，所以可以记录下每一个运算符
        //然后将所有乘除的结果均压入栈中
        //最后将栈的结果依次累加便是最终答案
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);

            if (Character.isDigit(c)) {
                num = num * 10 + (c - '0');  // 累积多位数字
            }
            // 遇到运算符（且不是空格）或最后一个字符时处理
            if ((!Character.isDigit(c) && c != ' ') || i == s.length() - 1) {
                switch (op) {
                    case '+':
                        stack.push(num);
                        break;
                    case '-':
                        stack.push(-num);
                        break;
                    case '*':
                        stack.push(stack.pop() * num);
                        break;
                    case '/':
                        stack.push(stack.pop() / num);  // Java 默认向零截断
                        break;
                }
                op = c;   // 更新当前运算符
                num = 0;  // 重置当前数字
            }
        }
        int ans = 0;
        while (!stack.isEmpty()) {
            ans += stack.pop();
        }
        return ans;
    }
}
